JavaScript语法盲点

2019.8.2更新
  1. 对象赋值

    在对象/数组中直接提取属性/值

    1
    2
    3
    4
    var [b]=[1,2,3]
    //b=1
    var {a}={a:1}
    //a=1
  2. 引用类型

    1
    2
    3
    4
    5
    var f=[1,2,3]
    //f=[1,2,3,4]
    var ff=f
    ff.push(5)
    //f=[1,2,3,4,5]
  3. ES6 扩展运算符(…)

  4. 1 解构赋值

    用于从一个对象取值,将目标对象所有可遍历的属性,且尚未读取的属性,分配到指定对象上。

    1
    2
    3
    4
    5
    //example1
    var {a,b,...c}={a:1,b:2,cc:3,dd:4}
    //a=1
    //b=2
    //c={cc:3,dd:4}

    解构赋值要求等号右边为对象(不能是undefined或null),且解构赋值必须是最后一个参数’

3.2 扩展运算符

对象的扩展运算符(…)用于取出参数对象的所有可遍历属性,拷贝到当前对象之中。

1
2
3
4
5
var obj1={a:1,b:2,c:4}
var obj2={a:2,b:4}
var obj={...obj1,...obj2}
//obj={a:2,b:4,c:6}
//会出现覆盖现象
  1. 深拷贝与浅拷贝/复制
  • 浅拷贝:将原对象/数组的引用直接赋值给新对象,新数组/对象只是原数组/对象的一个引用;
  • 深拷贝:创建一个新的数组/对象,将原数组/对象的元素或各项属性拷贝过来。
  1. Array.of()与Array()
1
2
3
4
var a=Array.of(1)
//a=[1]
var b=Array(1)
//b=[empty*3]

2019.8.3 更新
  1. Map
    Map相当于Object,但比Object更好用,区别在于Map可以设置的键值可以为函数。

    一个Object的键只能是字符串或者 Symbols,但一个 Map 的键可以是任意值,包括函数、对象、基本类型。
    Map 中的键值是有序的,而添加到对象中的键则不是。因此,当对它进行遍历时,Map 对象是按插入的顺序返回键值。
    你可以通过 size 属性直接获取一个 Map 的键值对个数,而 Object 的键值对个数只能手动计算。
    Map 可直接进行迭代,而 Object 的迭代需要先获取它的键数组,然后再进行迭代。
    Object 都有自己的原型,原型链上的键名有可能和你自己在对象上的设置的键名产生冲突。虽然 ES5 开始可以用 map = Object.create(null) 来创建一个没有原型的对象,但是这种用法不太常见。
    Map 在涉及频繁增删键值对的场景下会有些性能优势。


2019.8.7 更新
  1. NaN的类型是 Number
  2. undefined的类型是undefined
  3. null的类型是object
  4. 命名符号不能包括:- + * / # @ ^ %
  5. 命名符号可以有:_ $